<%@ page contentType="image/jpeg;charset=UTF-8" %> 
<%@ page import="java.awt.*" %>
<%@ page import="java.awt.image.*" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.imageio.*" %>

<%
	int fc = 200;
	int bc = 250;
    Random random2 = new Random();
        
    if(fc>255) fc=255;
    if(bc>255) bc=255;
    int rr=fc+random2.nextInt(bc-fc);
    int gg=fc+random2.nextInt(bc-fc);
    int bb=fc+random2.nextInt(bc-fc);
    def color1 =  new Color(rr,gg,bb);
        
    fc = 160;
    bc = 200;
    rr=fc+random2.nextInt(bc-fc);
    gg=fc+random2.nextInt(bc-fc);
    bb=fc+random2.nextInt(bc-fc);
    def color2 =  new Color(rr,gg,bb);

	//设置页面不缓存
	response.setHeader("Pragma","No-cache");
	response.setHeader("Cache-Control","no-cache");
	response.setDateHeader("Expires", 0);
	
	// 在内存中创建图象
	int width=60, height=20;
	BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
	
	// 获取图形上下文
	Graphics g = image.getGraphics();
	
	//生成随机类
	Random random = new Random();
	
	// 设定背景色
	g.setColor(color1);
	g.fillRect(0, 0, width, height);
	
	//设定字体
	g.setFont(new Font("Times New Roman",Font.PLAIN,18));
	
	//画边框
	//g.setColor(Color.BLACK);
	//g.drawRect(0,0,width-1,height-1);
	
	// 随机产生155条干扰线，使图象中的认证码不易被其它程序探测到
	g.setColor(color2);
	for (i in 0..<155)
	{
		int x = random.nextInt(width);
	    int y = random.nextInt(height);
	    int xl = random.nextInt(12);
	    int yl = random.nextInt(12);
	    g.drawLine(x,y,x+xl,y+yl);
	}
	
	//随机产生4位字符的认证码
	String chars = "0123456789abcdefghijklmnopqrstuvwxyz";
	char [] randStr = new char[4];
	for(int i=0; i<4; i++)
	{
		int rand = (int)(Math.random() * 36);
		randStr[i] = chars.charAt(rand);
	} 
	String randCode = new String(randStr);
	
	for (i in 0..<randCode.length()){
	    String rand=String.valueOf(randCode.substring(i,i+1));
	    // 将验证码显示到图象中
	    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同，可能是因为种子太接近，所以只能直接生成
	    g.drawString(rand,13*i+6,16);
	}
	
	// 将验证码存入session
	request.setAttribute("randCode",randCode);
		
	// 图象生效
	g.dispose();
	
	// 输出图象到页面
	ImageIO.write(image, "JPEG",response.getOutputStream());

%> 
